#[钛妹]: 钛哥！继承是不是就像快递柜的"升级加强版"？
#[钛哥]: 精辟！就像冷藏柜继承基础柜，还能自己加buff。看这个家族：

class BaseLocker:
    """基础快递柜父类"""
    total_count = 0  # 类属性统计总数
    
    #[钛妹]: __init__是快递柜的出生设置？
    #[钛哥]: 没错！每个新柜都带基础配置：
    def __init__(self, location):
        self.location = location    # 摆放位置
        self.packages = []          # 包裹列表
        BaseLocker.total_count += 1
        
    def store_package(self, tracking_num):
        """存件方法"""
        self.packages.append(tracking_num)
        return f"{tracking_num}已存入"
    
    #[钛妹]: 这个__str__是柜子的身份证？
    #[钛哥]: 对！重写展示方式：
    def __str__(self):
        return f"【{self.location}】基础柜 包裹数：{len(self.packages)}"

#[钛妹]: 怎么创建子类？
#[钛哥]: 看冷藏柜继承大法：
class FridgeLocker(BaseLocker):
    """子类：冷藏快递柜"""
    def __init__(self, location, temp=4):
        super().__init__(location)  # 调用父类初始化
        self.temperature = temp     # 新增温度属性
        
    #[钛妹]: 要重写父类方法吗？
    #[钛哥]: 看这个加强版存件方法：
    def store_package(self, tracking_num):
        if len(self.packages) >= 10:
            return "冷藏柜已满！"
        self.packages.append(tracking_num)
        return f"冷链包裹{tracking_num}已冷藏"
    
    #[钛妹]: 添加专属方法
    def show_temp(self):
        return f"当前冷藏温度：{self.temperature}℃"
    
    #[钛哥]: 重写__str__更专业：
    def __str__(self):
        return (f"【{self.location}】冷藏柜 "
                f"包裹数：{len(self.packages)} 温度：{self.temperature}℃")

#[钛妹]: 试试这个继承链！
basic = BaseLocker("A座大堂")
cold = FridgeLocker("B1生鲜区", 6)

#[钛妹]: 基础柜操作
print(basic.store_package("SF1001"))  # SF1001已存入
print(basic)  # 【A座大堂】基础柜 包裹数：1

#[钛妹]: 子类特有操作
print(cold.store_package("JD生鲜001"))  # 冷链包裹JD...
print(cold.show_temp())  # 当前冷藏温度：6℃
print(cold)  # 显示温度信息的__str__

#[钛妹]: 多继承怎么玩？
#[钛哥]: 看这个太阳能冷藏柜：
class SolarLocker(FridgeLocker):
    """多重继承：太阳能冷藏柜"""
    def __init__(self, location, temp):
        super().__init__(location, temp)
        self.battery = 100  # 新增电量属性
        
    def charge(self, hours):
        """专属充电方法"""
        self.battery += hours * 10
        if self.battery > 100: 
            self.battery = 100
        return f"充电后电量：{self.battery}%"
    
    #[钛哥]: 重写存件方法加入电量检测
    def store_package(self, tracking_num):
        if self.battery < 20:
            return "电量不足无法冷藏！"
        return super().store_package(tracking_num)

#[钛妹]: 多重继承实例测试
solar = SolarLocker("C区天台", 5)
print(solar.charge(3))  # 充电后电量：100%
print(solar.store_package("太阳牌冰淇淋"))  # 正常存储
solar.battery = 15  # 模拟低电量
print(solar.store_package("融化的冰淇淋"))  # 电量不足提示

#[钛妹]: 类型检测怎么做？
#[钛哥]: 用isinstance和issubclass：
print(issubclass(SolarLocker, BaseLocker))  # True
print(isinstance(solar, FridgeLocker))      # True

#[钛妹]: 方法重写的奥秘？
#[钛哥]: 子类方法覆盖父类，看这个：
class DebugLocker(BaseLocker):
    """调试用快递柜"""
    def store_package(self, tracking_num):
        print(f"【DEBUG】尝试存入{tracking_num}")
        return super().store_package(tracking_num)

debug = DebugLocker("测试区")
print(debug.store_package("TEST001"))  # 带调试信息

#[钛妹]: 抽象类怎么实现？
#[钛哥]: 用abc模块，比如：
from abc import ABC, abstractmethod

class SmartDevice(ABC):
    """抽象基类"""
    @abstractmethod
    def status_report(self):
        pass
    
class RobotLocker(BaseLocker, SmartDevice):
    """实现抽象方法的子类"""
    def status_report(self):
        return f"机器人柜状态：{len(self.packages)}包裹"

robot = RobotLocker("D区实验室")
print(robot.status_report())  # 必须实现抽象方法

#[钛妹]: 今天收获满满！总结一下：
#[钛妹]: 继承就像家族传承，子类自带父辈天赋
#[钛妹]: super()是传家宝，能调用父类技能
#[钛妹]: 重写就像青出于蓝，还能加专属buff
#[钛妹]: 对了各位！持续学习才是硬道理！点赞关注不迷路！